package br.com.salao.model;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import org.apache.log4j.Logger;

import br.com.salao.entity.Usuario;
import br.com.salao.session.UsuarioBase;
import br.com.salao.util.Utils;

public class UsuarioModel {

	private Logger logger = Logger.getLogger(UsuarioModel.class.getName());

	public Usuario inserir(Usuario usuario) throws Exception{
		try {	
			UsuarioBase usuarioBase = getBean();
			return usuarioBase.inserir(usuario);
		}catch (Exception e) {
			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getCause());
			e.printStackTrace();
			
			logger.error(sb.toString());
			throw e;
		}
	}

	public Usuario update(Usuario usuario) throws Exception{
		try {	
			UsuarioBase usuarioBase = getBean();
			return usuarioBase.update(usuario);
		}catch (Exception e) {
			
			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getCause());
			sb.append(e.getStackTrace());
			
			logger.error(sb.toString());
			throw e;
		}
	}

	public Usuario buscarUsuarioPeloCpf(Usuario usuario) throws Exception{
		try {	
			UsuarioBase usuarioBase = getBean();
			return usuarioBase.buscarUsuarioPeloCpf(usuario.getCpf());
		}catch (Exception e) {
			
			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getCause());
			sb.append(e.getStackTrace());
			
			logger.error(sb.toString());
			throw e;
		}
	}

	public Usuario buscarUsuarioPeloEmail(Usuario usuario) throws Exception{
		try {	
			UsuarioBase usuarioBase = getBean();
			return usuarioBase.buscarUsuarioPeloEmail(usuario.getEmail());
		}catch (Exception e) {
			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getCause());
			sb.append(e.getStackTrace());
			
			logger.error(sb.toString());
			throw e;
		}
	}	

	public boolean isCampoNulo(Usuario usuario,String cidade,String bairro) throws Exception{

		UsuarioBase usuarioBase = getBean();
		return usuarioBase.isCampoNulo(usuario, cidade, bairro);		
	}

	public Usuario formatarCampos(Usuario usuario) throws Exception{
		UsuarioBase usuarioBase = getBean();
		return usuarioBase.formatarCampos(usuario);
	}

    public UsuarioBase getBean() throws Exception {
    	
        Properties prop = Utils.getProperties();     
        Context ctx = new InitialContext(prop); 
        Object ref = ctx.lookup(prop.getProperty("USUARIO_LOOKUP"));       
      
        return (UsuarioBase)PortableRemoteObject.narrow(ref, UsuarioBase.class);
    }
}
